
package com.tianya.common.config;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.core.io.Resource;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

/**
 * 配置类，用于加载和管理配置属性。
 */
public class Config implements InitializingBean {

    /**
     * 日志记录器。
     */
    private static final Logger logger = LoggerFactory.getLogger(Config.class);

    /**
     * 配置属性文件列表。
     */
    private List<Resource> properties;

    /**
     * 配置属性集合。
     */
    private static Properties prop;

    /**
     * 初始化bean后加载配置。
     * @throws Exception 如果加载过程中出现异常。
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        reload();
    }

    /**
     * 设置配置属性文件列表。
     * @param properties 配置属性文件列表。
     */
    public void setProperties(List<Resource> properties) {
        this.properties = properties;
    }

    /**
     * 根据键获取配置属性的值。
     * @param key 属性键。
     * @return 属性值，如果未找到或属性尚未加载，则返回null。
     */
    public static String getString(String key) {
        synchronized (Config.class) {
            if (prop == null) {
                logger.warn("Properties have not been loaded.");
                return null;
            }
            return prop.getProperty(key);
        }
    }

    /**
     * 重新加载配置属性。
     * @throws IOException 如果读取配置文件时发生错误。
     */
    private void reload() throws IOException{
        prop = new Properties();
        for (Resource resource : properties) {
            prop.load(resource.getInputStream());
        }
    }
}